﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace veterinaria.negocio
{
    public class GestorUsuarios
    {
        /// <summary>
        /// Para mostrar todos los usuarios registrados.
        /// </summary>
        /// <returns></returns>
        public static DataTable verTodos()
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "SELECT E.Apellido AS 'Empleado', U.Nombre AS 'Nombre', U.Email AS 'E-mail', R.Nombre AS 'Rol', U.Contraseña AS 'Contraseña', U.Id_Usuario AS 'Codigo', U.Nro_Doc_Empleado AS 'Nro_Doc_Empleado', U.Id_Rol AS 'Id_Rol' FROM Usuario U INNER JOIN Rol R ON U.Id_Rol = R.Id_Rol INNER JOIN Empleado E ON U.Nro_Doc_Empleado = E.Nro_Doc_Empleado";

            cmd.Connection = con;

            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());

            con.Close();
            return dt;
        }

        /// <summary>
        /// Para insertar un nuevo usuario.
        /// </summary>
        /// <param name="nroDoc"></param>
        /// <param name="nombreUsuario"></param>
        /// <param name="contraseña"></param>
        /// <param name="email"></param>
        /// <param name="idRol"></param>
        /// <returns></returns>
        public static int insertar(int nroDoc, string nombreUsuario, string contraseña, string email, int idRol)
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "INSERT INTO Usuario (Nombre,Email,Contraseña,Id_Rol,Nro_Doc_Empleado) VALUES (@Nombre,@Email,@Contraseña,@Id_Rol,@Nro_Doc_Empleado)";

            cmd.Parameters.AddWithValue("@Nombre",nombreUsuario);
            cmd.Parameters.AddWithValue("@Email",email);
            cmd.Parameters.AddWithValue("@Contraseña",contraseña);
            cmd.Parameters.AddWithValue("@Id_Rol",idRol);
            cmd.Parameters.AddWithValue("@Nro_Doc_Empleado",nroDoc);

            int filas = cmd.ExecuteNonQuery();

            con.Close();

            return filas;
        }

        /// <summary>
        /// Para modificar un usuario.
        /// </summary>
        /// <param name="nroDoc"></param>
        /// <param name="nombreUsuario"></param>
        /// <param name="contraseña"></param>
        /// <param name="email"></param>
        /// <param name="idRol"></param>
        /// <param name="idUsuario"></param>
        /// <returns></returns>
        public static int modificar(string nombreUsuario, string contraseña, string email, int idRol, int idUsuario)
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;

            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "UPDATE Usuario SET Nombre=@Nombre,Email=@Email,Contraseña=@Contraseña,Id_Rol=@Id_Rol WHERE Id_Usuario=@Id_Usuario";

            cmd.Parameters.AddWithValue("@Nombre", nombreUsuario);
            cmd.Parameters.AddWithValue("@Email", email);
            cmd.Parameters.AddWithValue("@Contraseña",contraseña);
            cmd.Parameters.AddWithValue("@Id_Rol", idRol);
            cmd.Parameters.AddWithValue("@Id_Usuario",idUsuario);

            int filas = cmd.ExecuteNonQuery();

            con.Close();

            return filas;
        }

        /// <summary>
        /// Para borrar un usuario.
        /// </summary>
        /// <param name="idUsuario"></param>
        /// <returns></returns>
        public static int borrar(int idUsuario)
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;

            cmd.CommandText = "DELETE FROM Usuario WHERE Id_Usuario=@Id_Usuario";

            cmd.Parameters.AddWithValue("@Id_Usuario", idUsuario);

            int filas = cmd.ExecuteNonQuery();

            con.Close();

            return filas;
        }

        /// <summary>
        /// Para cargar los roles.
        /// </summary>
        /// <returns></returns>
        public static DataTable getRoles()
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;

            cmd.Connection = con;
            cmd.CommandText = "SELECT Id_Rol, Nombre FROM Rol";

            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());

            con.Close();
            return dt;
        }

        /// <summary>
        /// Debería estar en el gestor de empleados.
        /// </summary>
        /// <returns></returns>
        public static DataTable getEmpleados()
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT Apellido AS 'Apellido', Nro_Doc_Empleado AS 'Documento' FROM Empleado";

            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());

            con.Close();

            return dt;
        }
    }
}
